package NO1_Array;

/**
 * 2025-08-25
 * 力扣 - 134. 加油站
 * <p>
 * 在一条环路上有 n 个加油站，其中第 i 个加油站有汽油 gas[i] 升。
 * 你有一辆油箱容量无限的的汽车，从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发，开始时油箱为空。
 * 给定两个整数数组 gas 和 cost ，如果你可以按顺序绕环路行驶一周，则返回出发时加油站的编号，否则返回 -1 。如果存在解，则 保证 它是 唯一 的。
 */
public class CanCompleteCircuitMain {
    public static void main(String[] args) {
        int[] gas = {1, 2, 3, 4, 5};
        int[] cost = {3, 4, 5, 1, 2};
        System.out.println(canCompleteCircuit(gas, cost));
    }

    private static int canCompleteCircuit(int[] gas, int[] cost) {
        int totalGas = 0;    // 总油量盈余
        int currentGas = 0;  // 当前油量
        int startStation = 0; // 起点站

        for (int i = 0; i < gas.length; i++) {
            int net = gas[i] - cost[i]; // 本站净收益
            totalGas += net;
            currentGas += net;

            // 如果当前油量不足，说明从当前起点无法继续
            if (currentGas < 0) {
                startStation = i + 1; // 重置起点为下一站
                currentGas = 0;      // 重置当前油量
            }
        }

        // 如果总油量不足，返回-1；否则返回起点
        return totalGas < 0 ? -1 : startStation;
    }
}
